package org.example;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;

public class DateDemo1 {
    public static void main(String[] args) throws ParseException {
        System.out.println("===============1");
        //创建对象表示一个时间  现在时间
        Date d1 = new Date();
        System.out.println(d1);

        //创建对象表示一个指定时间  0L表示毫秒原点
        Date d2 = new Date(0L);
        System.out.println(d2);

        //设置时间毫秒值
        d2.setTime(1000L);
        System.out.println(d2);

        //获取时间毫秒值
        long time = d2.getTime();
        time = time + 1000L * 60 * 60 * 24 * 365;
        d2.setTime(time);
        System.out.println(time);

        System.out.println("===============2");
        Random r = new Random();

        Date d3 = new Date(Math.abs(r.nextInt()));
        System.out.println(d3);
        Date d4 = new Date(Math.abs(r.nextInt()));
        System.out.println(d4);
        long time3 = d3.getTime();
        System.out.println(time3);
        long time4 = d4.getTime();
        System.out.println(time4);
        if (time3 > time4) {
            System.out.println("第一个时间在第二个之后");
        } else if (time3 < time4) {
            System.out.println("第一个时间在第二个之前");
        } else {
            System.out.println("两个时间相同");
        }
        System.out.println("===============3");
        //SimpleDateFormat  格式化日期
        //空参构造  默认格式 yyyy-MM-dd HH:mm:ss
        SimpleDateFormat sdf = new SimpleDateFormat();
        Date d5 = new Date();
        String str = sdf.format(d5);
        System.out.println(str);
        //有参构造  指定格式
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EE");
        String str1 = sdf1.format(d5);
        System.out.println(str1);

        //解析字符串日期为Date对象
        /*
        格式必须和字符串日期格式一致
        否则会抛出ParseException异常
         */
        String str2 = "2024-05-15 12:00:00 星期一";
        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // parse 方法是 SimpleDateFormat 类的一个成员方法，
        // 其作用是把  符合特定格式的字符串  解析成 Date 对象
        Date d6 = sdf2.parse(str2);
        System.out.println(d6.getTime());

        System.out.println("==============4");
        String str3 = "2000-11-11";
        SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd");
        Date d7 = sdf3.parse(str3);
        System.out.println(sdf3.format(d7));
        SimpleDateFormat sdf4 = new SimpleDateFormat("YYYY年MM月dd日");
        String str4 = sdf4.format(d7);
        System.out.println(str4);

        System.out.println("==============5");
        String startstr = "2024-05-15 12:00:00";
        String endstr = "2024-05-15 12:10:00";
        String orderstr = "2024-05-15 12:09:00";
        SimpleDateFormat sdf5 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date startDate = sdf5.parse(startstr);
        Date endDate = sdf5.parse(endstr);
        Date orderDate = sdf5.parse(orderstr);
        long startTime = startDate.getTime();
        long endTime = endDate.getTime();
        long orderTime = orderDate.getTime();
        if (startTime < orderTime && orderTime < endTime) {
            System.out.println("秒杀成功");
        } else {
            System.out.println("秒杀失败");
        }
        System.out.println("==============6");
        //Calendar  日历类
        //1:获取日历对象
        //不是经过new，是用静态方法：getInstance()
        /*
        会根据系统的不同时区，获取不同的日历对象，默认表示当前时间
        会把时间中的纪元 0，年1，月2，日，时，分，秒，星期  都获取到放
        到一个数组中
        3：一年中的第几周
        4：一月中的第几周
        5：一月中的第几天（日期）

        月份是从0开始的 0~11
        星期是从1 ：周日 开始的 1 ~ 7周六
         */
        Calendar c = Calendar.getInstance();

        //修改日历代表的时间
        Date d = new Date(0L);
        c.setTime(d);
        System.out.println(c);
        //public int get (int field) 获取指定字段的值
        //public void set (int field,int value) 设置指定字段的值
        c.set(Calendar.YEAR, 2005);
        c.set(Calendar.MONTH, 4);
        c.set(Calendar.DAY_OF_MONTH, 3);
        //public void add (int field,int amount) 为指定字段添加指定的值
        c.add(Calendar.YEAR, 1);

        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH) + 1;
        int date = c.get(Calendar.DAY_OF_MONTH);
        int week = c.get(Calendar.DAY_OF_WEEK);
        System.out.println(year + "年" + month + "月" + date + "日" + getWeek(week));
    }


    public static String getWeek(int index){
         String[] arr={"","星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
         return arr[index];
      }

}
